package com.qqtech.qquan.mall.service;

import java.math.BigDecimal;
import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.qqtech.core.frame.service.BaseService;
import com.qqtech.qquan.mall.model.MallShop;
import com.qqtech.qquan.mall.model.MallShopQuery;
import com.qqtech.qquan.mall.model.MallShopVo;

public interface MallShopService extends BaseService<MallShop> {
	
	/**
	 * 后台查询列表
	 * @param query
	 * @param pageable
	 * @return
	 */
	public Page<MallShopVo> queryPageListAdmin(MallShop query, Pageable pageable);
	
	/**
	 * 通过用户id查询店铺
	 * @param creatorId 用户id
	 * @return
	 */
	public MallShopVo getByCreatorId(Integer creatorId);
	
	/**
	 * 是否店主
	 * @param userId
	 * @param shopId
	 * @return
	 */
	public boolean isShopOwner(Integer userId,Integer shopId);
	
	/**
	 * 获取社区圈商店铺数量
	 * @param communityId 社区id
	 * @param style 圈商店铺类型:1-邻里店,2-社区店铺
	 * @return
	 */
	public int getCountShopByCommunityId(Integer communityId, Integer style);
	
	/**
	 * 获取首页推荐的圈商店铺
	 * @param communityId 社区id；communityId=null则查全部社区
	 * @param style 圈商店铺类型:1-邻里店,2-社区店铺;style=null则查全部类型
	 * @param count 数量;count=null查全部
	 * @return
	 */
	public List<MallShopVo> listByHasRecommend(Integer communityId, Integer style, Integer count);
	
	/**
	 * 更新店铺订单销量字段，数量+1
	 * @param shopId 店铺id
	 * @return
	 */
	public int addSaleOrderCount(Integer shopId);
	
	/**
	 * 更新店铺订单销量字段，数量-1
	 * @param shopId 店铺id
	 * @return
	 */
	public int subSaleOrderCount(Integer shopId);
	
	/**
	 * 我收藏的全部店铺
	 * @param userId 用户id
	 * @param communityId 社区id
	 * @param type 店铺类型:1-直营超市,2-圈商店铺
	 * @param style 店铺种类:1-邻里店,2-社区店铺
	 * @param auditStatus 店铺审核状态，auditStatus=null则查全部状态
	 * @return
	 */
	public List<MallShopVo> queryListByCollect(Integer userId, Integer communityId, Integer type, Integer style, Integer auditStatus);
	
	/**
	 * 创建店铺
	 */
	public void handleSave(MallShop shop);

	/**
	 * 查询所有店铺
	 * @return
	 */
	public List<MallShopVo> queryALl();

	Page<MallShopVo> queryDistancePage(MallShopQuery query, Pageable pageable);

	List<MallShopVo> queryListByCollectV1(Integer userId, Integer communityId, Integer type, Integer style,
			Integer auditStatus, BigDecimal x, BigDecimal y);

	/**
	 * 获取店铺服务社区的半径【单位米】
	 * @param key
	 * @return
	 */
	Integer getServiceCommunityDistance(String key);
}